/**
给定一个整数数组，其中第 i 个元素代表了第 i 天的股票价格 。​

设计一个算法计算出最大利润。在满足以下约束条件下，你可以尽可能地完成更多的交易（多次买卖一支股票）:

你不能同时参与多笔交易（你必须在再次购买前出售掉之前的股票）。
卖出股票后，你无法在第二天买入股票 (即冷冻期为 1 天)。
示例:

输入: [1,2,3,0,2]
输出: 3 
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/
func maxProfit(prices []int) int {
   if len(prices) < 2{
       return 0
   }
   // 0 不持股 1 持股 2 冷冻
   dp := []int{0, 0-prices[0], 0}
   pre0, pre1 := dp[0], dp[1]
   for i := 1; i < len(prices);i++{
       dp[0] = max(pre0, pre1 + prices[i])
       dp[1] = max(pre1, dp[2] - prices[i])
       dp[2] = pre0

       pre0 = dp[0]
       pre1 = dp[1]
   }
   return max(dp[0], dp[2])
}

func max(x, y int) int {
    if x > y {
        return x
    }
    return y
}
